From 265394cb0d325a66f6bcc047ad79afdaeeb32161 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Thu, 4 Feb 2010 08:53:16 +0000 Subject: [PATCH] x86: fix frame table initialization when hotplug memory regions were detected max_idx is not a pdx, and hence needs to be converted to one in all cases where it is being passed to pdx_to_page(). Also, just like for max_pdx, the conversion result of max_idx may point into an address space hole, and hence it must not be used directly as an argument to pdx_to_page(). Note that this doesn't apply to the arguments passed to memset(), as the size argument would be zero in the case of hitting an address space hole. Signed-off-by: Jan Beulich --- xen/arch/x86/mm.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 5f457e6af4..cab20a6f66 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -225,10 +225,11 @@ void __init init_frametable(void) pdx_to_page(max_pdx - 1) + 1); else { - init_frametable_chunk(pdx_to_page(sidx *PDX_GROUP_COUNT), - pdx_to_page(max_idx * PDX_GROUP_COUNT)); - memset(pdx_to_page(max_pdx), -1, (unsigned long)pdx_to_page(max_idx) - - (unsigned long)(pdx_to_page(max_pdx))); + init_frametable_chunk(pdx_to_page(sidx * PDX_GROUP_COUNT), + pdx_to_page(max_idx * PDX_GROUP_COUNT - 1) + 1); + memset(pdx_to_page(max_pdx), -1, + (unsigned long)pdx_to_page(max_idx * PDX_GROUP_COUNT) - + (unsigned long)pdx_to_page(max_pdx)); } } -- 2.30.2